Providing end users with shared resources in an operating environment can present capacity planning challenges. The end-user experience is optimized when the systems can ensure that resources are delivered to users in a prompt and reasonable amount of time such that overloading is avoided. When a system is overloaded or otherwise not properly load balanced, the system may be unable to provide a user with the required resources in a reasonable amount of time thereby decreasing an end user's user-experience. There are many challenges associated with trying to forecast and plan for the amount of resources required by a particular user. Existing load balancing systems fail to adequately address these challenges.
For example, at any point in time, a user could require more or less resources. Moreover, users may not consume these resources constantly but rather their consumption amounts and periods may vary as applications are updated, additional applications are installed, or user behavior changes. In addition, the challenges can be exacerbated when multiple user sessions or users share a common pool of hardware resources. It is often difficult to predict how many users a physical computer, server, or other infrastructure can support. In some instances, administrators can determine the amount of hardware allocated to each workload a priori. This existing solution in inadequate and has shortcomings.
Meanwhile, a branch of computer science exists called computational learning theory (CLT), in which machine learning algorithms and their performance are analyzed. The performance of a CLT algorithm can greatly vary; some algorithms can be completed within a fixed amount of time, while others may have probabilistic bounds. In addition, the time complexity of a CLT algorithm can have positive or negative results, depending on whether the functions of the algorithm can be learned in polynomial time or not, respectively. CLT algorithms may sometimes be implemented using an artificial neural network (e.g., a connectionist model).
The Stuttgart neural network simulator (SNNS) is a simulator for neural networks developed at the Institute for Parallel and Distributed High Performance Systems at the University of Stuttgart. The SNNS simulator 200 consists of four main components: simulator kernel, graphical user interface, batch execution interface (e.g., batchman), and network compiler (e.g., snns2c, which takes some inputs and generates a trained network file as C source code). Referring to FIG. 2, the simulator kernel component operates on internal network data structures of the neural networks and performs operations on them. The graphical user interface, which may be built on top of the kernel, gives a graphical representation of the neural networks and controls the kernel during the simulation run, including the ability to directly create, manipulate, and visualize complex neural networks in various ways.
The SNNS user guide explains that in artificial neural networks (e.g., connectionist models), “knowledge is usually distributed throughout the net and is stored in the structure of the topology and the weights of the links. The networks are organized by (automated) training methods, which greatly simplify the development of specific applications. Classical logic in ordinary [artificial intelligence] AI systems is replaced by vague conclusions and associative recall (exact match vs. best match). This is a big advantage in all situations where no clear set of logical rules can be given. The inherent fault tolerance of connectionist models is another advantage. Furthermore, neural nets can be made tolerant against noise in the input: with increased noise, the quality of the output usually degrades only slowly (graceful performance degradation).” Although simulators exist for neural networks, their practical application outside of academia/universities is limited, particularly in the area of server capacity planning.